﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Sebrae.Academico.Trilhas.BP;
using Sebrae.Academico.Trilhas.Dominio.Classes;
using Sebra.Academico.Trilhas.BP;
using Sebra.Academico.InfraEstrutura.Core.Helper;

namespace Sebrae.Academico.Trilhas.WebForms.Cadastros.MatriculaTrilha
{
    public partial class EdicaoMatriculaTrilha : System.Web.UI.Page
    {
        private UsuarioTrilha usuarioTrilhaEdicao = null;
        private ManterMatriculaTrilha manterMatriculaTrilha = new ManterMatriculaTrilha();

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                this.PreencherCombos();

                if (Session["MatriculaTrilhaEdit"] != null)
                {
                    int idItemTrilha = int.Parse(Session["MatriculaTrilhaEdit"].ToString());
                    usuarioTrilhaEdicao = manterMatriculaTrilha.ObterMatriculaTrilhaporID(idItemTrilha);
                    PreencherCampos(usuarioTrilhaEdicao);
                }
                else
                {
                    txtDtInicio.Text = DateTime.Now.ToShortDateString();
                    txtDtInicio.Enabled = false;
                }
            }
        }

        private void PreencherCampos(UsuarioTrilha usuarioTrilha)
        {
            if (usuarioTrilha != null)
            {
                WebFormHelper.SetarValorNaCombo(usuarioTrilha.Trilha.ID.ToString(), ddlTrilha);
                WebFormHelper.SetarValorNaCombo(usuarioTrilha.TrilhaNivel.ID.ToString(), ddlTrilhaNivel);
                WebFormHelper.SetarValorNaCombo(usuarioTrilha.Uf.ID.ToString(), ddlUf);
                WebFormHelper.SetarValorNaCombo(usuarioTrilha.NivelOcupacional.ID.ToString(), ddlNivelOcupacional);
                WebFormHelper.SetarValorNaCombo(usuarioTrilha.StatusMatricula.ID.ToString(), ddlStatus);

                txtDtInicio.Text = usuarioTrilha.DtInicio.ToShortDateString();

                if (usuarioTrilha.DtFim.HasValue)
                    txtDtFim.Text = usuarioTrilha.DtFim.Value.ToString();

                if (usuarioTrilha.DtLimite.HasValue)
                    txtDtLimite.Text = usuarioTrilha.DtLimite.Value.ToString();

                if (usuarioTrilha.NotaProva.HasValue)
                    txtNotaProva.Text = usuarioTrilha.NotaProva.Value.ToString();

            }

        }

        protected void btnSalvar_Click(object sender, EventArgs e)
        {
            //Todo: - Este page.isvalid so faz sentido com o uso dos validators
            //Ex: RequiredFieldValidator, RegularExpressionValidator
            if (Page.IsValid)
            {
                try
                {
                    if (Session["MatriculaTrilhaEdit"] == null)
                    {
                        manterMatriculaTrilha = new ManterMatriculaTrilha();
                        usuarioTrilhaEdicao = this.ObterObjetoUsuarioTrilha();
                        manterMatriculaTrilha.IncluirMatriculaTrilha(usuarioTrilhaEdicao);
                    }
                    else
                    {
                        usuarioTrilhaEdicao = ObterObjetoUsuarioTrilha();
                        usuarioTrilhaEdicao.ID = int.Parse(Session["MatriculaTrilhaEdit"].ToString());
                        manterMatriculaTrilha.AlterarMatriculaTrilha(usuarioTrilhaEdicao);
                        Session.Remove("MatriculaTrilhaEdit");
                    }
                }
                catch (Exception ex)
                {
                    //TODO -> Exibir mensagem de Erro em um alert ? -> Precisamos definir isso
                    throw ex;
                }

                Response.Redirect("ListarMatriculaTrilha.aspx");
            }
        }


        #region "Métodos Privados"

        public UsuarioTrilha ObterObjetoUsuarioTrilha()
        {

            usuarioTrilhaEdicao = new UsuarioTrilha();

            //Usuario
            usuarioTrilhaEdicao.Usuario = new Usuario() { ID = int.Parse(lblUsuario.Text) };

            //Trilha
            if (!string.IsNullOrWhiteSpace(this.ddlTrilha.SelectedItem.Value))
                usuarioTrilhaEdicao.Trilha = new Trilha() { ID = int.Parse(this.ddlTrilha.SelectedItem.Value) };

            //Trilha Nivel
            if (!string.IsNullOrWhiteSpace(this.ddlTrilhaNivel.SelectedItem.Value))
                usuarioTrilhaEdicao.TrilhaNivel = new TrilhaNivel() { ID = int.Parse(this.ddlTrilhaNivel.SelectedItem.Value) };

            //uf
            if (!string.IsNullOrWhiteSpace(this.ddlUf.SelectedItem.Value))
                usuarioTrilhaEdicao.Uf = new Uf() { ID = int.Parse(this.ddlUf.SelectedItem.Value) };

            //Nivel Ocupacional
            if (!string.IsNullOrWhiteSpace(this.ddlNivelOcupacional.SelectedItem.Value))
                usuarioTrilhaEdicao.NivelOcupacional = new NivelOcupacional() { ID = int.Parse(this.ddlNivelOcupacional.SelectedItem.Value) };
            
            //Status
            if (!string.IsNullOrWhiteSpace(this.ddlStatus.SelectedItem.Value))
                usuarioTrilhaEdicao.StatusMatricula = new StatusMatricula() { ID = int.Parse(this.ddlStatus.SelectedItem.Value) };

            VerificarDatas();

            //Nota da Prova
            if (!string.IsNullOrWhiteSpace(this.txtNotaProva.Text))
            {
                decimal notaProva = 0;
                if (!decimal.TryParse(this.txtNotaProva.Text.Trim(), out notaProva))
                    throw new Exception("Valor Inválido para o Campo Nota Prova.");
                else
                    usuarioTrilhaEdicao.NotaProva = notaProva;
            }
            
            return usuarioTrilhaEdicao;
        }

        private void VerificarDatas()
        {
            //Data de Inicio
            usuarioTrilhaEdicao.DtInicio = CommonHelper.TratarData(this.txtDtInicio.Text, "Data de Início");

            //Data Fim
            usuarioTrilhaEdicao.DtInicio = CommonHelper.TratarData(this.txtDtFim.Text, "Data Fim");

            //Data Limite
            usuarioTrilhaEdicao.DtLimite = CommonHelper.TratarData(this.txtDtLimite.Text, "Data Limite");
        }

        private void LimparCampos()
        {
            ddlTrilha.ClearSelection();
            ddlTrilhaNivel.ClearSelection();
            ddlUf.ClearSelection();
            ddlNivelOcupacional.ClearSelection();
            txtDtInicio.Text = "";
            txtDtFim.Text = "";
            txtDtLimite.Text = "";
        }

        private void PreencherCombos()
        {
            try
            {
                PreencherComboTrilhas();
                PreencherComboTrilhaNivel();
                PreencherComboUF();
                PreencherComboNivelOcupacional();
                PreencherComboStatus();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        private void PreencherComboStatus()
        {
            ManterStatusMatricula manterStatusMatricula = new ManterStatusMatricula();
            IList<StatusMatricula> ListaStatus = manterStatusMatricula.ObterTodosStatusMatricula();
            WebFormHelper.PreencherLista(ListaStatus, this.ddlStatus);
        }

        private void PreencherComboNivelOcupacional()
        {
            ManterNivelOcupacional manterNivelOcupacional = new ManterNivelOcupacional();
            IList<NivelOcupacional> ListaTrilhas = manterNivelOcupacional.ObterTodosNivelOcupacional();
            WebFormHelper.PreencherLista(ListaTrilhas, this.ddlNivelOcupacional);
        }

        private void PreencherComboUF()
        {
            ManterUf manterUf = new ManterUf();
            IList<Uf> ListaTrilhas = manterUf.ObterTodosUf();
            WebFormHelper.PreencherLista(ListaTrilhas, this.ddlUf);
        }

        private void PreencherComboTrilhas()
        {
            ManterTrilha manterTrilha = new ManterTrilha();
            IList<Trilha> ListaTrilhas = manterTrilha.ObterTrilhas();
            WebFormHelper.PreencherLista(ListaTrilhas, this.ddlTrilha);
        }

        private void PreencherComboTrilhaNivel()
        {
            ManterTrilhaNivel manterTrilhaNivel = new ManterTrilhaNivel();
            IList<TrilhaNivel> ListaTrilhaNivel = manterTrilhaNivel.ObterTodos();
            WebFormHelper.PreencherLista(ListaTrilhaNivel, this.ddlTrilhaNivel);
        }


        #endregion

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            Response.Redirect("ListarMatriculaTrilha.aspx");
        }
    }
}